package qgs.zisu.javaconcurrency.javaconcurrency.chapter4_DaemonThread;

/**
 * @Author: 蔡翔
 * @Date: 2019/9/18 15:35
 * @Version 1.0
 */
public class DeamonThread {
    public static void main(String[] args) {
        Thread t = new Thread(){
            // 这里的Thread.currentThread().getName() 是t 线程。
            @Override
            public void run(){
               try {
                   System.out.println(Thread.currentThread().getName()+"running");
                   Thread.sleep(1000);
                   System.out.println(Thread.currentThread().getName()+"done");
               }catch (Exception e){
                   e.printStackTrace();
               }
            }
        };

        //调用start后 是runnable 状态 -》 running、blocked、dead状态
        t.start();
        try {
            t.join();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        // 这里的Thread.currentThread()是main线程
        System.out.println(Thread.currentThread().getName());

        /**
         *         注意跑的流程是这样的，先执行main线程，虽然main函数里面夹杂着t线程，但执行t线程 还是先等main线程跑完再执行t线程。
         *         main
         *         Thread-0running
         *         Thread-0done
         *
         *         //当 Thread.sleep(100000) ,然后main 线程 sleep(5000)
         *         这样结果就是，都是并行跑的，
         *         Thread-0running
         *         main
         *         Thread-0done
         **/



    }

    /**
     *  A和B 之间建立长连接 ，需要一个守护线程
     *  A <-------------> B
     *  -> daemonThread(health check ) 做健康检查
     *
     *
     *  如果不是守护线程，可能你的通讯线程已经死了（应用程序关不掉吗，因为有活动线程在运行，jvm是不会把这些线程回收的），但是如果是守护线程 这个线程会一直报错给你一些辅助性的提示，
     **/
}